User Access Control (UAC) এবং Authorization হল ওয়েব অ্যাপ্লিকেশন সিকিউরিটির একটি গুরুত্বপূর্ণ অংশ। এই দুটি পদ্ধতি ব্যবহারকারীদের বিভিন্ন স্তরের অ্যাক্সেস প্রদান এবং তাদের অ্যাক্সেসের সীমা নির্ধারণ করতে সাহায্য করে। PHP এবং MySQL ব্যবহার করে, আপনি ব্যবহারকারীদেরকে লগইন, রেজিস্ট্রেশন, এবং তাদের অনুমতি (permissions) নিয়ন্ত্রণ করতে পারেন।
১. User Authentication (লগইন এবং রেজিস্ট্রেশন)
ব্যবহারকারীকে সিস্টেমে প্রবেশ করতে দেয়ার আগে তাদের পরিচয় যাচাই করতে হয়। এটি করা হয় Authentication এর মাধ্যমে, যেখানে ব্যবহারকারীর নাম এবং পাসওয়ার্ড যাচাই করা হয়।
১.১ User Registration (ব্যবহারকারী রেজিস্ট্রেশন)
ব্যবহারকারীকে সিস্টেমে প্রথমবার রেজিস্টার করতে হবে। রেজিস্ট্রেশন ফর্মটি সাধারণত ব্যবহারকারীর নাম, ইমেইল এবং পাসওয়ার্ডের জন্য থাকে।
<!DOCTYPE html>
<html>
<head>
<title>User Registration</title>
</head>
<body>
<form action="register.php" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br><br>
<input type="submit" value="Register">
</form>
</body>
</html>
১.২ Registration PHP Script
রেজিস্ট্রেশন স্ক্রিপ্টে, ব্যবহারকারীর তথ্য সঠিকভাবে যাচাই করে ডেটাবেসে সংরক্ষণ করতে হবে।
<?php
// ডেটাবেস সংযোগ
$conn = new mysqli("localhost", "root", "", "my_database");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// ইনপুট ডেটা গ্রহণ
$username = $_POST['username'];
$email = $_POST['email'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT); // পাসওয়ার্ড হ্যাশ করা
// SQL কুয়েরি
$sql = "INSERT INTO users (username, email, password) VALUES ('$username', '$email', '$password')";
if ($conn->query($sql) === TRUE) {
echo "New user registered successfully";
} else {
echo "Error: " . $conn->error;
}
$conn->close();
?>
এখানে:
- password_hash() ফাংশনটি পাসওয়ার্ড সুরক্ষিতভাবে সংরক্ষণ করতে ব্যবহৃত হয়।
- ডেটাবেসে username, email, এবং password সংরক্ষণ করা হচ্ছে।
২. User Login (ব্যবহারকারী লগইন)
ব্যবহারকারীর লগইন প্রক্রিয়া তখন সম্পন্ন হয় যখন তারা তাদের username এবং password দিয়ে সিস্টেমে প্রবেশ করতে চান।
২.১ Login Form
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="login.php" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
২.২ Login PHP Script
লগইন স্ক্রিপ্টে, ব্যবহারকারীর ইনপুটের সাথে ডেটাবেসে সংরক্ষিত পাসওয়ার্ডের মিল চেক করা হয়।
<?php
// ডেটাবেস সংযোগ
$conn = new mysqli("localhost", "root", "", "my_database");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$username = $_POST['username'];
$password = $_POST['password'];
// SQL কুয়েরি ব্যবহার করে ইউজার চেক করা
$sql = "SELECT id, password FROM users WHERE username = '$username'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
// পাসওয়ার্ড মিলানো
if (password_verify($password, $row['password'])) {
echo "Login successful!";
// সেশন শুরু করে ইউজারের জন্য একটি সেশন আইডি তৈরি করুন
session_start();
$_SESSION['user_id'] = $row['id'];
$_SESSION['username'] = $username;
header("Location: dashboard.php"); // ড্যাশবোর্ডে রিডিরেক্ট
} else {
echo "Invalid password.";
}
} else {
echo "User not found.";
}
$conn->close();
?>
এখানে:
- password_verify() ফাংশনটি ব্যবহারকারী দ্বারা দেওয়া পাসওয়ার্ডের সাথে ডেটাবেসে সংরক্ষিত হ্যাশ করা পাসওয়ার্ড মেলানো হয়।
- $_SESSION ব্যবহার করে লগইন করা ব্যবহারকারীর সেশন তৈরি করা হয়, যাতে পরবর্তী পেজে তাদের তথ্য সংরক্ষণ করা যায়।
৩. User Authorization (ব্যবহারকারী অনুমোদন)
Authorization হল একটি প্রক্রিয়া যার মাধ্যমে নির্ধারণ করা হয় যে একটি ব্যবহারকারী কিসে অ্যাক্সেস পাবে বা কী করতে পারবে। এটি সাধারণত ব্যবহারকারীর ভূমিকা (role) এবং তাদের অনুমতি (permissions) অনুযায়ী নির্ধারণ করা হয়।
৩.১ Role-Based Access Control (RBAC)
ব্যবহারকারীকে বিভিন্ন role নির্ধারণ করে, যেমন admin, editor, viewer। তারপর এই রোলের মাধ্যমে তাদের কার্যক্রম সীমিত বা অনুমোদিত করা হয়।
৩.১.১ User Table with Roles
ডেটাবেসে ব্যবহারকারীদের বিভিন্ন রোল অ্যাসাইন করতে একটি নতুন role কলাম যোগ করা হয়।
CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
role VARCHAR(50) NOT NULL, -- admin, editor, viewer ইত্যাদি
reg_date TIMESTAMP
);
৩.১.২ Assigning Roles
ব্যবহারকারীকে রোল দেওয়া হয় রেজিস্ট্রেশন বা ইউজার আপডেট করার সময়।
// রেজিস্ট্রেশন স্ক্রিপ্টে
$role = 'viewer'; // ডিফল্ট রোল, এটিকে admin বা editor হিসেবে পরিবর্তন করা যাবে
$sql = "INSERT INTO users (username, email, password, role) VALUES ('$username', '$email', '$password', '$role')";
৩.২ Access Control in PHP
ব্যবহারকারীর রোল অনুযায়ী তাদের বিভিন্ন পেজে অ্যাক্সেস দেওয়া হয়।
<?php
// সেশন স্টার্ট করা
session_start();
// সেশন চেক করা
if (isset($_SESSION['user_id'])) {
// ডেটাবেসে রোল চেক করা
$conn = new mysqli("localhost", "root", "", "my_database");
$sql = "SELECT role FROM users WHERE id = '" . $_SESSION['user_id'] . "'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
// রোল অনুযায়ী অনুমতি দেওয়া
if ($row['role'] == 'admin') {
// অ্যাডমিন পেজে প্রবেশ
echo "Welcome, Admin!";
} elseif ($row['role'] == 'editor') {
// এডিটর পেজে প্রবেশ
echo "Welcome, Editor!";
} else {
// ভিউয়ার পেজে প্রবেশ
echo "Welcome, Viewer!";
}
} else {
echo "You must log in first.";
}
$conn->close();
?>
এখানে:
- $_SESSION['user_id'] এবং $_SESSION['role'] ব্যবহার করে ব্যবহারকারীর রোল যাচাই করা হয়।
- ব্যবহারকারী যদি admin হয়, তবে তাদের এক্সেস দেয়া হয় অ্যাডমিন পেজে, এবং অন্যদের জন্য তাদের রোল অনুযায়ী অ্যাক্সেস কন্ট্রোল করা হয়।
৪. Best Practices for User Access Control and Authorization
- Strong Passwords: ব্যবহারকারীদের জন্য শক্তিশালী পাসওয়ার্ড প্রেরণা দিন এবং পাসওয়ার্ড হ্যাশিং ব্যবহার করুন।
- Session Management: সেশন পরিচালনার জন্য সেশন টাইম আউট এবং সেশন চেকিং ব্যবহার করুন।
- Role-Based Access Control (RBAC): প্রতিটি ব্যবহারকারীর জন্য যথাযথ রোল নির্ধারণ করুন এবং তাদের এক্সেস কন্ট্রোল করুন।
- Privilege Levels
Read more